from datetime import datetime
from app.models.movie import Movie
from app.utils.db import db

class MovieService:
    """
    影视资源服务类，处理影视资源相关业务逻辑
    """
    
    @staticmethod
    def get_all_movies():
        """获取所有影视资源"""
        return db.select(Movie)
    
    @staticmethod
    def get_active_movies():
        """获取所有激活的影视资源"""
        movies = db.select(Movie, is_active=1)
        return movies
    
    @staticmethod
    def get_movie_by_id(movie_id):
        """根据ID获取影视资源"""
        movies = db.select(Movie, id=movie_id)
        return movies[0] if movies else None
    
    @staticmethod
    def get_movie_by_name(name):
        """根据名称获取影视资源"""
        movies = db.select(Movie, name=name)
        return movies[0] if movies else None
    
    @staticmethod
    def create_movie(data):
        """
        创建新影视资源
        :param data: 字典，包含影视资源数据
        :return: 创建的影视资源对象
        """
        # 检查资源名是否已存在
        existing_movie = MovieService.get_movie_by_name(data.get('name'))
        if existing_movie:
            raise ValueError("资源名称已存在")
            
        # 创建影视资源对象
        movie = Movie(
            name=data.get('name'),
            desc=data.get('desc'),
            url=data.get('url'),
            play_url=data.get('play_url'),
            is_active=1 if data.get('is_active') == 'on' else 0,
            created_at=datetime.now()
        )
        
        # 保存到数据库
        return db.insert(movie)
    
    @staticmethod
    def update_movie(movie_id, data):
        """
        更新影视资源信息
        :param movie_id: 影视资源ID
        :param data: 字典，包含要更新的影视资源数据
        """
        # 检查影视资源是否存在
        movie = MovieService.get_movie_by_id(movie_id)
        if not movie:
            raise ValueError("影视资源不存在")
            
        # 准备更新数据
        updates = {
            "name": data.get('name'),
            "desc": data.get('desc'),
            "url": data.get('url'),
            "play_url": data.get('play_url'),
            "is_active": 1 if data.get('is_active') == 'true' else 0,
            "updated_at": datetime.now()
        }
        
        # 更新数据库
        db.update(Movie, updates, id=movie_id)
        
        return MovieService.get_movie_by_id(movie_id)
    
    @staticmethod
    def delete_movie(movie_id):
        """
        删除影视资源
        :param movie_id: 影视资源ID
        """
        # 检查影视资源是否存在
        movie = MovieService.get_movie_by_id(movie_id)
        if not movie:
            raise ValueError("影视资源不存在")
            
        # 从数据库删除
        db.delete(Movie, id=movie_id)
    
    @staticmethod
    def get_resources_for_api():
        """
        获取所有有效的资源列表，用于API请求
        :return: 资源列表字典
        """
        try:
            movies = MovieService.get_active_movies()
            resources = []
            for movie in movies:
                resources.append({
                    "name": movie.name,
                    "desc": movie.desc,
                    "url": movie.url,
                    "play_url": movie.play_url
                })
            return resources
        except Exception as e:
            print(f"查询数据库出错: {e}")  # 错误处理
            return [] # 返回空列表，避免程序崩溃 